-
Posts
4,483 -
Joined
-
Last visited
-
Days Won
120
Tom Wellige last won the day on June 16
Tom Wellige had the most liked content!
Reputation
85 ExcellentProfile Information
-
Gender
Male
-
Interests
SwyxWare, Software Development
Recent Profile Visitors
15,675 profile views
-
Lua → VBScript To use any of these functions just follow these steps: Copy the function code into the Windows clipboard (select the code and press Ctrl-C) Open you GSE call routing rule. Double click the Start block Switch to the Parameters page Click into the huge text field and paste the function code by pressing Ctrl-V. Click OK. The function is now available within you call routing rule and can now be used directly within GSE blocks. Handle boolean return values The above example function IsUserFree() returns a booelan value. It can most conveniently be called with the Evaluate block: Handle numeric return values (up to 10 different ones) If your function returns more than 2 different values you can use an Insert Script Code block to evaluate up to 10 different values graphically. This is an example of how to use the GetUserStatus() function: Handle any return values You can call your own functions nearly everywhere within your GSE script. Where ever you find a button behind a parameter text field, you can call your function if it returns a needed value. For example a function GetDestination() returns the extension a call should be connected to with a Connect To block:
-
VBScript → Lua To use any of these functions just follow these steps: Copy the function code into the Windows clipboard (select the code and press Ctrl-C) Open you GSE call routing rule. Double click the Start block Switch to the Parameters page Click into the huge text field and paste the function code by pressing Ctrl-V. Click OK. The function is now available within you call routing rule and can now be used directly within GSE blocks. Handle boolean return values The above example function IsUserFree returns a booelan value. It can most conveniently be called with the Evaluate block: Handle numeric return values (up to 10 different ones) If your function returns more than 2 different values you can use an Insert Script Code block to evaluate up to 10 different values graphically. This is an example of how to use the UserStatus function: Handle any return values You can call your own functions nearly everywhere within your GSE script. Where ever you find a button behind a parameter text field, you can call your function if it returns a needed value. For example a function GetDestination returns the extension a call should be connected to with a Connect To block:
-
Lua → VBScript SwxWare v13.10 You can use the build-in GSE function in your own call routing where ever you need them. At many places within the GSE block parameter dialogs you'll find a button right after a field to enter some value in. For example the properties dialog of the Connect To block: This button has exactly two purposes: telling you that you can put in any Lua code you like into the field before. Please note, that you have to place a "=" (equal) character in front of your code to tell the GSE that the following will be some Lua code that needs to be executed/evaluated. providing a list of all build in GSE functions and defined variables within your script by clicking on it. By double clicking on a function or variable (or click on the "Use" button) the selected item will be copied into the configuration field. If this field was initially empty the GSE will automatically place the "=" (equal) character in front of it, otherwise the GSE assumes you have already done that and simply adds the selected item to the content of the configuration field. Please note, that the GSE also defines a number of hidden functions, so called Helper Functions, which are listed and documented in the menu on the left. They are separated into Common Helper Functions String Helper Functions and can be freely used within you own call routing code.
-
VBScript → Lua You can use the build-in GSE function in your own call routing where ever you need them. At many places within the GSE block parameter dialogs you'll find a button right after a field to enter some value in. For example the properties dialog of the Connect To block: This button has exactly two purposes: telling you that you can put in any VBScript code you like into the field before. Please note, that you have to place a "=" (equal) character in front of your code to tell the GSE that the following will be some VBScript code that needs to be executed/evaluated. providing a list of all build in GSE functions and defined variables within your script by clicking on it. By double clicking on a function or variable (or click on the "Use" button) the selected item will be copied into the configuration field. If this field was initially empty the GSE will automatically place the "=" (equal) character in front of it, otherwise the GSE assumes you have already done that and simply adds the selected item to the content of the configuration field.
-
Wo das Thema hier gerade nochmal aufgenommen wurde, ein kleiner Ausblick auf die SwyxWare 14.25, die auf der Enreach Partner Konferenz letzten Monat angekündigt wurde. In dieser Version wird der "Durchstellen" Block im GSE um 2 neue Funktionen erweitert: 1. Also deliver call to user's mobile number Hier wird der Ruf nicht nur auf das angegebene Ziel durchgestellt, sondern auch geschaut, ob das Ziel (interner Benutzer) eine Mobil Nummer hinterlegt hat. Wenn ja, wird auch an diese parallel (call fork) zugestellt. Stellt man auf eine Gruppe zu, wird dies auch bei allen Gruppen Mitgliedern gemacht. Ebenso funktionert es, wenn man mehere interne Zielrufnummern (per ; getrennt) angibt. 2. Wait for DTMF confirmation from destination Der Ruf wird erst an das Ziel durchgestellt, wenn innerhalb eines Timeouts von 10 Sekunden die konfigurierte DTMF Bestätigung gemacht wird. Erfolgt die Bestätigung nicht, wird der ruf nicht durchgestellt und man verlässt den Block über den "nicht verbunden" Ausgang. Bei der Zustellung auf Gruppen ist darauf zu achten, dass diese keine parallele Zustellung machen darf, sondern nur umlaufend oder sequentiell. Diese Feature hat 2 wesentliche Anwendungen: - Mobilboxen: der Ruf wird nicht an eine Mobilbox zugestellt, da diese sicherlich keine DTMF Bestätigung schickt - Alarmrufe, bei denen der angerufene bestätigen muss, dass der Ruf akzeptiert wird
-
Tom Wellige started following Callrouting für externe Ziele zufällige Verteilung , Zufriedenheits-Abfrage nach Telefonat mit Mitarbeiter , Telefonnummer Blockieren and 2 others
-
Zufriedenheits-Abfrage nach Telefonat mit Mitarbeiter
Tom Wellige replied to vtcn05's topic in Call Routing
Hallo Michael, solange der Agent nicht einfach auflegt, ist das zu realisieren. Der Agent transferiert den Ruf am Ende einfach auf einen Call Routing User, der die Zufriedenheitsabfrage macht. Eine automatische Lösung fällt mir an dieser Stelle nicht ein. -
Ja genau. Dieses Feature ist auf der Enreach Partner Konferenz im letzten Monat für die SwyxWare Version 14.25 angekündigt worden. Die Freigabe dieser Version ist für den Oktober 2025 geplant.
-
Hallo Stefan, die SwyxWare bietet Dir eine flexible Anbindung an eigene Verwaltungssysteme um in Anrufen wie gewünscht reagieren zu können. Während es Dir vielleicht schon ausreichen würde, eine solche Blockade Funktion innerhalb der Telefonanlage verwalten zu können, gibt es auch Ansprüche, die eine solche Verwaltung innerhalb von z.B. CRM Systemen fordern. Mit dem Callrouting der SwyxWare kannst Du auf alle möglichen Ansprüche eingehen. Allerdings gibt es so wie Du es forderst keine fertige Lösung direkt im Produkt. Wenn Du magst, findest Du hier aber eine allgemeine Anleitung, wie man eine Blockade Funktion (Blacklisting) mit dem Call Routing realisieren kann. https://www.swyxforum.com/blogs/entry/100-21-the-world-isnt-black-white-or-is-it/ Wenn Du diesen Ansatz weiter verfolgen möchtest und noch einige weiteren Tipps und Hinweise benötigst, meld Dich einfach hier.
-
Hallo Adrian, im Augenblick wirst Du das mit dem ECR noch nicht hinbekommen, da der "Durchstellen" Block im GSE derzeit keine Bestätigung abfragen kann, so wie Du es brauchst. Was bereits gehen würde ist, dass Du einen SwyxIt! Classic Client über das Client SDK dazu veranlässt, einen Ruf auf Deine Gruppe zu machen und sich erst dann zufrieden gibt, wenn nach einem Connect ein # DTMF Zeichen empfangen wird. Soetwas lässt sich bauen. Oder Du wartest noch bis zum nächsten Uüdate der SwyxWare. Dort wird das Call Routing (genauer gesagt der "Durchstellen" Block) um die Funktionalität erweitert, die hier gebraucht wird: nach dem Durchstellen auf ein Zeichen (z.B. #) warten. Wenn das innerhalb eines gegebenen Timeouts nicht kommt, gilt der Ruf als nicht verbunden und Du kannst entsprechend reagieren.
-
Hallo und sorry für die späte Reaktion. Die Frage war komplett an mir vorbei gegangen... Du kannst zunächst mittels PBXGroup.IsLoggedIn überprüfen, ob mindestens ein Benutzer in der angerufenen Gruppe angemeldet ist. Dazu benutzt Du einfach einen "Variable auswerten" Block und trägst den Funktionsaufruf ohne weitere Zusätze in das Textfeld ein. Wird der Block über den "Wahr" Ausgang verlassen, ist wenigstens ein Benutzer angemeldet. In diesem Fall kannst Du nun mittels PBXGroup.IsBusy überprüfen, ob wenigstens ein Benutzer der Gruppe frei ist. Dazu benutzt Du wieder einen "Variable auswerten" Block. Wenn Du über den "Falsch" Ausgang heraus kommst, kannst Du den Ruf mittels "Durchstellen" Block (auf das ursprüngliche Ziel) an die Gruppe zustellen. In den beiden anderen Fällen ("Falsch" Ausgang vom ersten "Variable auswerten" Block, und "Wahr" Ausgang vom zweiten "Variable auswerten" Block) kann Du mit dem "E-Mail versenden" Block die gewünschte Benachrichtigung verschicken. Wenn Du hierbei aktuelle Werte Anrufernummer im Betreff und Text der EMail verwenden willst, ist das kein Problem: Betreff, z.B.: = "Anruf von " & IpPbx.CallingNumber Text, z.B.: = "Name: " & IpPbx.CallingName & vbCRLF & _ "Nummer: " & IpPbx.CallingNumber & vbCRLF & _ "Uhrzeit: " & CurDateTime() Die Werte IpPbx.CallingName, IpPbx.CallingNumber und CurDateTime sind der Liste hinter dem x/y Knopf am Ende des jeweiligen Textfeldes entnommen. Ich hoffe, dass Du damit erstmal weiter kommst. Wenn nicht, frag einfach nochmal nach.
-
Callrouting für externe Ziele zufällige Verteilung
Tom Wellige replied to Stefan Fuchs's topic in Call Routing
Für das Ein- und Ausbuchen kannst Du Dir auch ein kleines Call Couting bauen. Leider habe ich im Augenblick keine Zeit das auch fertig zu machen, würde es aber in etwa so implementieren: - eine kleine VBSkript Funktion die... - die aktuelle Text Datei mit den Nummern drin in ein VBSkript Array einliesst - prüft, ob die aktuelle Anrufer Nummer im Array enthalten ist - wenn ja, dann aus dem Array löschen - wenn nein, ans Ende des Arrays anfügen - die aktuelle Datei neu erzeugt (d.h. erst löschen) und dann neu schreiben (mit dem Inhalt des Arrays) Ja, jeder Aufruf der obigen Funktion ermittelt aufs Neue eine zufällige Nummer aus der Datei. Da der Aufruf der Einfachheit halb ja direkt im Durchstellen Block geschieht, kann Du mehrere solcher Blöcke einfach hintereinander setzen. -
Callrouting für externe Ziele zufällige Verteilung
Tom Wellige replied to Stefan Fuchs's topic in Call Routing
Hallo Stefan, das lässt mit ein wenig VBSkript lösen. Ich habe Dir da mal was "vorbereitet" Kopiere den folgenden Code in die Parameter Seite des Start Block Deiner GSE Regel: Const NUMBER_TEXT_FILE = "C:\Projects\numbers.txt" Dim g_aNumbers() Dim g_nNumbers g_aNumbers = Array() '---------------------------------------------------------------- ' ReadNumbersFromFile ' ' Reads a text file containing phone numbers into a string array. ' ' Parameter: ' ' Return: ' boolean True - at least one number read from file '---------------------------------------------------------------- Function ReadNumbersFromFile PBXScript.OutputTrace "-----------> ReadNumbersFromFile" Dim bReturn, sLine, nCount bReturn = False On Error Resume Next Dim fso, file Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(NUMBER_TEXT_FILE) Then Set file = fso.OpenTextFile(NUMBER_TEXT_FILE, 1) ' fsoForReading If Err <> 0 Then PBXScript.OutputTrace "Error opeing file '" & NUMBER_TEXT_FILE & "'!" PBXScript.OutputTrace Err & ": " & Err.Description Else PBXScript.OutputTrace "File '" & NUMBER_TEXT_FILE & "' opened" g_nNumbers = 0 Do Until file.AtEndOfStream sLine = Trim(file.ReadLine) If sLine <> "" Then g_nNumbers = g_nNumbers + 1 PBXScript.OutputTrace g_nNumbers & ": " & sLine bReturn = True ReDim Preserve g_aNumbers(g_nNumbers) g_aNumbers(g_nNumbers) = sLine End If Loop file.Close End If Set file = Nothing Else PBXScript.OutputTrace "File '" & NUMBER_TEXT_FILE & "' does not exist!" End If Set fso = Nothing ReadNumbersFromFile = bReturn PBXScript.OutputTrace "bReturn = " & bReturn PBXScript.OutputTrace "<----------- ReadNumbersFromFile" End Function '---------------------------------------------------------------- ' GetRamdomNumberFromFile ' ' Returns a given number from a file containing a list of numbers. ' ' Parameter: ' sDefaultNumber number to return if no number can be taken from file ' ' Return: ' string valid number of empty string '---------------------------------------------------------------- Function GetRamdomNumberFromFile ( sDefaultNumber ) PBXScript.OutputTrace "-----------> GetRamdomNumberFromFile ( " & sDefaultNumber & " )" Dim sReturn, nMin, nMax, nIndex sReturn = sDefaultNumber If ReadNumbersFromFile Then ' get random number between 1 and num of numbers in file Randomize nMin = 1 nMax = g_nNumbers nIndex = CInt((nMax-nMin+1) * Rnd + nMin) If nIndex < nMin Then nIndex = nMin If nIndex > nMax Then nIndex = nMax PBXScript.OutputTrace "nIndex = " & nIndex sReturn = g_aNumbers(nIndex) End If GetRamdomNumberFromFile = sReturn PBXScript.OutputTrace "sReturn = " & sReturn PBXScript.OutputTrace "<----------- GetRamdomNumberFromFile" End Function In der ersten Zeile des Codes musst Du den Ort und den Namen der Textdatei anpassen. Hierbei beachte bitte, dass das Call Routing Leserechte auf der Datei haben muss. D.h. Du musst dem Benutzer unter dem der SwyxServer Dienst läuft (in der Regel "SwyxServiceAccount") entsprechende Berechtigung geben. wenn Du Dich in der Cloud befindest (d.h. auf einer SwyxON) hast Du keinen Zugriff auf das lokale Dateisystem und damit fällt diese Lösung komplett flach. Anschliessend kannst Du die Funktion GetRamdomNumberFromFile direkt in einem Durchstellen Block aufrufen. Sie erhält als Parameter die Nummer die zurück gegeben werden, wenn keine Nummer aus der Textdatei gelesen werden kann. Folgendes musst Du in den Durchstellen Block eintragen: = GetRamdomNumberFromFile("100") -
Tom Wellige started following Large Skin
-
-
Im SwyxIt! Classic ist die Anzahl der möglichen Namenstasten in einer Skin tatsächlich auf 250 begrenzt. Das ist hart im Produkt verdrahtet und lässt sich nicht von aussen ändern.
-
Hallo Martin, eine fertige Lösung habe ich leider nicht für Dich (obwohl ich vor vielen Jahren mal exakt eine solche Lösung in den Fingern hatte). Du kannst die folgende VBSkript Funktion als Grundlage nehmen, um eine Textdatei auszuwerten. https://www.swyxforum.com/vbscript-function-collection/functions/checkcallerintextfile-r3/ Statt auf Telefonnummern in jeder Zeile prüft Du dann auf ein Datum und schaust, ob es gleich dem aktuellen ist. Das geht in VBSkript ganz gut mittels DateDiff.
